package com.beauty.logistics.service;

import com.beauty.logistics.dto.ShipmentRequest;
import com.beauty.logistics.dto.ShipmentResponse;
import com.beauty.logistics.entity.Shipment.ShipmentStatus;

import java.time.LocalDateTime;
import java.util.List;

public interface ShipmentService {
    
    ShipmentResponse createShipment(ShipmentRequest shipmentRequest);
    
    ShipmentResponse getShipmentById(Long id);
    
    ShipmentResponse getShipmentByTrackingNumber(String trackingNumber);
    
    List<ShipmentResponse> getShipmentsByOrderId(String orderId);
    
    List<ShipmentResponse> getShipmentsByCustomerId(String customerId);
    
    List<ShipmentResponse> getShipmentsByStatus(ShipmentStatus status);
    
    List<ShipmentResponse> getShipmentsByCarrierName(String carrierName);
    
    List<ShipmentResponse> getShipmentsByShippingDateRange(LocalDateTime start, LocalDateTime end);
    
    List<ShipmentResponse> getShipmentsByEstimatedDeliveryDateRange(LocalDateTime start, LocalDateTime end);
    
    List<ShipmentResponse> getAllShipments();
    
    ShipmentResponse updateShipmentStatus(Long id, ShipmentStatus status);
    
    ShipmentResponse updateShipmentTracking(Long id, String trackingNumber);
    
    ShipmentResponse updateShipmentDeliveryDate(Long id, LocalDateTime estimatedDeliveryDate);
    
    ShipmentResponse markShipmentAsShipped(Long id, LocalDateTime shippingDate);
    
    ShipmentResponse markShipmentAsDelivered(Long id, LocalDateTime deliveryDate);
    
    void deleteShipment(Long id);
} 